home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1999 / MacHack 1999.toast / The Hacks / DesktopDoubler / Common / Headers / Nub.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-25  |  2.3 KB  |  73 lines  |  [TEXT/CWIE]

  1. #ifndef _NUB_
  2. #define _NUB_
  3.  
  4. #include <Files.h>
  5. #include <MacTypes.h>
  6. #include "VersionNumber.h"
  7.  
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11.  
  12.  
  13. typedef pascal OSStatus (*NubLoadProcPtr)(Handle code);
  14. typedef pascal OSStatus (*NubUnloadProcPtr)(Handle *code);
  15.  
  16. #if GENERATINGCFM
  17.     typedef UniversalProcPtr             NubLoadUPP;
  18.     typedef UniversalProcPtr             NubUnloadUPP;
  19. #else
  20.     typedef NubLoadProcPtr                NubLoadUPP;
  21.     typedef NubUnloadProcPtr            NubUnloadUPP;
  22. #endif
  23.  
  24. enum {
  25.     uppNubLoadProcInfo = kPascalStackBased
  26.         | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
  27.         | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(Handle))),
  28.     uppNubUnloadProcInfo = kPascalStackBased
  29.         | RESULT_SIZE(SIZE_CODE(sizeof(OSStatus)))
  30.         | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(Handle*)))
  31. };
  32.  
  33. #if GENERATINGCFM
  34.     #define NewNubLoadProc(userRoutine)                    (NubLoadUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),uppNubLoadProcInfo,GetCurrentArchitecture())
  35.     #define NewNubUnloadProc(userRoutine)                (NubUnloadUPP)NewRoutineDescriptor((ProcPtr)(userRoutine),uppNubUnloadProcInfo,GetCurrentArchitecture())
  36. #else
  37.     #define NewNubLoadProc(userRoutine)                    ((NubLoadUPP)(userRoutine))
  38.     #define NewNubUnloadProc(userRoutine)                ((NubUnloadUPP)(userRoutine))
  39. #endif
  40.  
  41. #if GENERATINGCFM
  42.     #define CallNubLoadProc(userRoutine,code)            CallUniversalProc((UniversalProcPtr)(userRoutine),uppNubLoadProcInfo,(code))
  43.     #define CallNubUnloadProc(userRoutine,code)            CallUniversalProc((UniversalProcPtr)(userRoutine),uppNubUnloadProcInfo,(code))
  44. #else
  45.     #define CallNubLoadProc(userRoutine,code)            (*(NubLoadProcPtr)(userRoutine))((code))
  46.     #define CallNubUnloadProc(userRoutine,code)            (*(NubUnloadProcPtr)(userRoutine))((code))
  47. #endif
  48.  
  49.  
  50. #define kNubSelector            'DD2x'
  51. #define kNubVersion                ((kMajorVersion << 24) | (kMinorVersion << 16) | (kReleaseStage << 8) | kNonFinalReleaseNumber)
  52. #define    kNubCompatible            0x00000000
  53. #define kNubSignature            kNubSelector
  54.  
  55.  
  56. typedef struct NubInfo
  57. {
  58.     UInt32                        signature;                // Set if installed and active, otherwise NULL.
  59.     NumVersion                    version;                // Version that is currently installed.
  60.     NumVersion                    compatible;                // Backwards compatible to this version.
  61.     struct PatchDesc            *patchList;                // Linked list of patch descriptors.
  62.     
  63.     NubUnloadUPP                unloadProc;                // Deactivate and unload from memory.
  64.     UInt8                        filler[128];            // Extra space...just in case...
  65. } NubInfo;
  66.  
  67.  
  68. #ifdef __cplusplus
  69. }
  70. #endif
  71.  
  72. #endif /* _NUB_ */
  73.